ApplyGuardrail API を使って Amazon Bedrock でサポートされていない LLM の入出力データをチェックする
こんにちは!クラウド事業本部コンサルティング部のたかくに(@takakuni_)です。
先日、ApplyGuardrail API を使って LLM 以外の入出力データをフィルタリングする少しトリッキーなブログを書きました。
今回は想定される Amzon Bedrock でサポートされていない LLM の利用時に Amazon Bedrock Guardrails を嚙ましてみたいと思います。
ApplyGuardrail API
ApplyGuardrail API は Amazon Bedrock Guardrails に期待される入出力データを渡しチェックする API です。直接、Amazon Bedrock Guardrails にデータを渡すため、 Amazon Bedrock でホストする LLM を介さず、ガードレールの機能を利用できます。
構成
今回は Amazon Bedrock でサポートされていない、 OpenAI 社の GPT-4o を利用したアプリケーションに Amazon Bedrock Guardrails を嚙ましてみたいと思います。入力と出力で合計 2 回 ApplyGuardrail API を実行するような作りです。
以下のようなコードを作り、入力データと出力データの両方にチェックを噛ませて見ました。
必要に応じて入力データのみチェックするなどに切り替えられるのは大変便利ですね。
import os
import boto3
import getpass
from langchain_openai import ChatOpenAI
if not os.environ.get("OPENAI_API_KEY"):
os.environ["OPENAI_API_KEY"] = getpass.getpass("Enter your OpenAI API key: ")
if not os.environ.get("GURADRAIL_ID"):
os.environ["GURADRAIL_ID"] = getpass.getpass("Enter your Amazon Bedrock Guardrail ID: ")
if not os.environ.get("GURADRAIL_VERSION"):
os.environ["GURADRAIL_VERSION"] = getpass.getpass("Enter your Amazon Bedrock Guardrail Version: ")
# LLM の初期化
llm = ChatOpenAI(
model="gpt-4o",
temperature=1,
max_tokens=None,
timeout=None,
max_retries=2
)
# Bedrock Runtime Clinet の初期化
client = boto3.client('bedrock-runtime')
while True:
user_input = input("You: ")
if user_input.lower() == "exit":
break
# 入力データのチェック
bedrock_response = client.apply_guardrail(
guardrailIdentifier=os.environ["GURADRAIL_ID"],
guardrailVersion=os.environ["GURADRAIL_VERSION"],
source='INPUT',
content=[
{
'text': {
'text': str(user_input)
}
}
]
)
# チェックに引っかかった場合
if len(bedrock_response['outputs']) > 0:
print("Guardrail: ", bedrock_response['outputs'][0]['text'])
continue
# 回答生成
answer = llm.invoke(user_input)
# 出力データのチェック
bedrock_response = client.apply_guardrail(
guardrailIdentifier=os.environ["GURADRAIL_ID"],
guardrailVersion=os.environ["GURADRAIL_VERSION"],
source='OUTPUT',
content=[
{
'text': {
'text': str(user_input)
}
}
]
)
# チェックに引っかかった場合
if len(bedrock_response['outputs']) > 0:
print("Guardrail: ", bedrock_response['outputs'][0]['text'])
continue
response = answer.content
print("Bot:", response)
ガードレールはコンテンツフィルターを設定しました。
うまく動いていますね。
(guardrails-applyguardrail-py3.12) takakuni@ guardrails_applyguardrail % python main.py
You: hello
Bot: Hello! How can I assist you today?
You: I would like to study in English.
Bot: That's great! Studying in English can open up many opportunities, as it's a widely spoken and used language in academia, business, and international communication. Here are a few steps you can take to begin your studies:
1. **Identify Your Goal:** Determine why you want to study in English. Are you looking to pursue a degree, improve your language skills, or enhance your career opportunities? Knowing your goal will help you choose the right path.
2. **Improve Your English Skills:**
- **Take English Classes:** Consider enrolling in an English language course, either in person or online.
- **Practice Regularly:** Consistently practice speaking, listening, reading, and writing in English.
- **Use Language Apps:** Apps like Duolingo, Rosetta Stone, or Babbel can be helpful in building language skills.
- **Engage with Native Speakers:** Try language exchange meetups or online platforms like Tandem or HelloTalk.
3. **Pursue English-Medium Education:**
- **Research Universities:** Look for universities offering courses or full degree programs in English, especially if you’re considering studying abroad.
- **Standardized Tests:** Prepare for English proficiency tests such as TOEFL, IELTS, or Cambridge English exams, which are often required for non-native speakers.
- **Online Courses:** Platforms like Coursera, edX, or FutureLearn offer courses in English from top universities.
4. **Select Your Field of Study:** Focus on a subject that interests you and aligns with your career goals.
5. **Prepare Financially:**
- **Scholarships and Grants:** Look for scholarships available to international students.
- **Budgeting:** Consider the cost of tuition, living expenses, and potential travel.
6. **Apply to Programs:**
- **Application Process:** Understand the application requirements for each program or university, including documentation needed.
- **Statement of Purpose and References:** Prepare a strong personal statement and gather academic or professional references.
7. **Immerse Yourself in the Language:**
- **Watch Movies/TV Shows:** Watch English-language media with subtitles to improve comprehension.
- **Read Books/Newspapers:** Reading various materials in English will expand your vocabulary and understanding of the language.
Studying in English can be challenging but rewarding. With dedication and the right resources, you can achieve your goals. Good luck with your studies!
You:
有害な入力データをインプットして見ました。ガードレールに設定した出力値がアウトプットされています。
(guardrails-applyguardrail-py3.12) takakuni@HL01556 guardrails_applyguardrail % python main.py
You: hello
Bot: Hello! How can I assist you today?
You: I would like to study Japanese, how to say in Japanese ****
Guardrail: 申し訳ありませんが、モデルはこの質問に回答できません。
You:
Amazon Bedrock でサポートされていないモデルの入出力をガードレールでチェックできていますね。
まとめ
以上、「ApplyGuardrail API を使って Amazon Bedrock でサポートされていない LLM の入出力データをチェックする」でした。
非常に疎結合な使い方ができて、とても便利な API ですね。
クラウド事業本部コンサルティング部のたかくに(@takakuni_)でした!